﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.IO;
using vudu.ClasesDominio;
using vudu.Logica.Comandos;
using vudu.Logica.Fabrica;
using vudu.Logica.IComandos;
using vudu.Logica.Clases;// mientras migran a ClasesDominio las clases de HorarioDeClase y Salon
using vudu.Logica.Excepciones;

namespace vudu.Logica.Fachada
{
    public class EnlaceLogico
    {
        private Rol miRol;

        public EnlaceLogico()
        {
           // miRol = new Rol(); No se puede ya que la Clase Rol es Abstracta
        }

        public Rol RolActual
        {
            get { return miRol; }
            set { miRol = value; }
        }

        #region VU_1 Gestionar Salones

        public void AgregarSalon(string _nombre, string _capacidad)
        {
        }

        public void ModificarSalon(string _nombre)
        {
        }

        public String ConsultarSalon(string _nombre)
        {
            return null;
        }

        public Boolean AgregarEnBD(String salon)
        {
            return true;
        }

        public List<String> CargarSalonesEnSistemas()
        {
            return null;
        }

        public String CargarInfoSalon(int _numeroSalon)
        {
            return null;
        }

        public Boolean ModificarSalonEnBD(String salon)
        {
            return false;
        }

        public void CambiarStatusSalon(string _nombre)
        {
        }

        #endregion VU_1 Gestionar Salones

        #region VU_2 Gestionar Escuelas

        public int AgregarEscuela(Escuela nuevaEscuela, String universidad)
        {
            IComandoAgregarEscuela comando = FabricaComando.CrearComandoAgregarEscuela(nuevaEscuela,universidad);
            return comando.Ejecutar();
        }

        public List<Escuela> ConsultarListaEscuela(String universidad)
        {
            IComandoConsultarEscuela comando = FabricaComando.CrearComandoConsultarEscuela(universidad);
            return comando.Ejecutar();
        }

        public String ConsultarEscuelaPorNombre(String escuela,String universidad)
        {
            return null;
        }

        public bool ModificandoEscuela(String escuela)
        {
            return false;
        }

        public bool EliminarEscuela(String escuela)
        {
            return false;
        }

        #endregion VU_2 Gestionar Escuelas

        #region VU_3 Gestionar Pensum de cada Escuela


        public List<Escuela> ConsultarEscuelasVecinas(int idEscuela)
        {
            List<Escuela> listaEscuela = new List<Escuela>();
            //aqui uso comando
            //listaEscuela=_controladorEscuela.ConsultarEscuelasVecinas(idEscuela);
            return listaEscuela;
        }

        public List<Materia> ConsultarMateriasDeEscuela(int idEscuela)
        {
            List<Materia> materias = new List<Materia>();
            //aqui uso al comando
            return materias;
        }

        public void ConfirmarCambioPensum()
        {

        }

        public void PensumActual()
        {

        }

        public void PensumNuevo()
        {

        }

        public int ConsultarPensumActivoEscuela(String pensumEscuela)
        {
            return 0;
        }

        public List<String> ConsultarPensums(String pensumEscuela)
        {
            return null;
        }

        #endregion VU_3 Gestionar Pensum de cada Escuela

        #region VU_4 Gestionar Materias

        public int AgregarMateria(Materia materia)
        {
            IComandoAgregarMateria comando = FabricaComando.CrearComandoAgregarMateria(materia);
            return comando.Ejecutar();
        }

        public int EliminarMateria(String m)
        {
            return 0;
        }

        public int ModificarMateria(List<String> modificaciones, String m)
        {
            return 0;
        }

        public String ConsultarMateria(String nombre, int tipo)
        {
            return null;
        }

        public List<String> ConsultarMaterias()
        {
            return null;
        }

        #endregion VU_4 Gestionar Materias

        #region VU_5 Gestionar Practicas por Materia

        public void CrearPractica(Practica miPractica, int idSeccionMateria, List<HorarioDeClase> horario, List<Salon> salones)
        {
            IComandoAgregarPractica comando = FabricaComando.CrearComandoAgregarPractica( miPractica, idSeccionMateria, horario, salones );
            comando.Ejecutar();
		}

        public List<Materia> ObtenerMateriasActivasConSeccTeoria(string nombreEscuela)
        {
            IComandoObtenerMateriasActivasConSeccTeoria comando = FabricaComando.CrearComandoObtenerMateriasActivasConSeccTeoria(nombreEscuela);
            return comando.Ejecutar();
        }

        public Escuela ArmarEscuela(string correoEscuela)
        {
            IComandoArmarEscuela comando = FabricaComando.CrearComandoArmarEscuela(correoEscuela);
            return comando.Ejecutar();
        }

        public List<SeccionMateria> ArmarListaDeSeccionesDisponibles(int idEscuela,int idMateria)
        {
            IComandoArmarListaDeSeccionesDisponibles comando = FabricaComando.CrearComandoArmarListaDeSeccionesDisponibles(idEscuela,idMateria);
            return comando.Ejecutar();
        }

        public List<Profesor> ConsultarProfesores(int idEscuela)
        {
            IComandoConsultarProfesores comando = FabricaComando.CrearComandoConsultarProfesores(idEscuela);
            return comando.Ejecutar();
        }
        //public int EliminarPractica(String m)
        //{
        //    return 0;
        //}

        //public int ModificarPractica(List<String> modificaciones, String m)
        //{
        //    return 0;
        //}

        //public String ConsultarPractica(String nombre, int tipo)
        //{
        //    return null;
        //}

        //public List<String> ConsultarPracticas()
        //{
        //    return null;
        //}

        #endregion VU_5 Gestionar Practicas por Materia

        #region VU_6 Gestionar Profesores

        public int agregarProfesor(Profesor profesor, int idEscuela)
        {
            IComandoAgregarProfesor comando = FabricaComando.CrearComandoAgregarProfesor(profesor, idEscuela);
            return comando.Ejecutar();
        }

        public int eliminarProfesor()
        {
            return 0;
        }

        public int modificarProfesor()
        {
            return 0;
        }

        public String consultarProfesor()
        {
            return null;
        }

        #endregion VU_6 Gestionar Profesores

        #region VU_7 Gestionar Esquema de Evaluacion por Profesor

        public List<SeccionMateria> ConsultarSeccionesProfesor(Profesor profesor)
        {
            IComandoLlenarComboMateriasProfesor miComando = FabricaComando.CrearComandoLlenarComboMateriasProfesor(profesor);
            return miComando.Ejecutar();
        }

        public List<String> ConsultarEvaluacionPorSeccion()
        {
            return null;
        }

        public List<String> ConsultarEsquemasDeEvaluacionSinNotasProfesor(String profesor)
        {
            return null;
        }

        public List<String> ConsultarEsquemasDeEvaluacionProfesor(String profesor)
        {
            return null;
        }

        public List<String> ConsultarEsquemaEvaluacionSeccion(String seccionMateria)
        {
            return null;
        }

        public List<String> ConsultarEsquemasEvaluacionEstudiante(String estudiante)
        {
            return null;
        }

        public int InsertarEvaluacion(Evaluacion evaluacion)
        {
            IComandoAgregarEsquemaEvaluacion miComando = FabricaComando.CrearComandoAgregarEsquemaEvaluacion(evaluacion);
            return miComando.Ejecutar();
        }

        public bool EliminarEsquemaDeEvaluacion(String seccionMateria)
        {
            return false;
        }

        public bool ModificarEvaluacion(String evaluacion)
        {
            return false;
        }

        #endregion VU_7 Gestionar Gestionar Esquema de Evaluacion por Profesor

        #region VU_8 Gestionar Notas de Estudiante

        #endregion VU_8 Gestionar Notas de Estudiante

        #region VU_9 Gestionar la Carga de Archivos PDF

        public FileInfo buscarRuta(List<String> miOperacion, int idComparar)
        {
            return null;
        }

        #endregion VU_9 Gestionar la Carga de Archivos PDF

        #region VU_10 Consultar Horarios de Materias e Imprimir

        private bool ValidarDatos()
        {
            return true;
        }

        private bool MostrarInfoSalon()
        {
            return true;
        }

        public String AgregarSalon(String nombreSalon)
        {
            return null;
        }

        public List<String> SalonesDisponibles(int horaInicioP, int horaFinP, String diaP, int idEscuela)
        {
            return null;
        }


        public List<String> CargarHorario(String dia)
        {
            return null;
        }

        public List<String> CompararSalones(List<String> salonNoDisponible, List<String> salonesTotal)
        {
            return null;
        }

        public List<String> listaSalonesOcupados(int horaInicioP, int horaFinP, List<String> listaHorario)
        {
            return null;
        }
       
        public void crearHorario()
        {
        }

        #endregion VU_10 Consultar Horarios de Materias e Imprimir

        #region VU_11 Consultar Estudiantes por Seccion e Imprimir

        public List<String> consultarEstudiantesSeccion(String seccion)
        {
            return null;
        }

        #endregion VU_11 Consultar Estudiantes por Seccion e Imprimir

        #region VU_12 Obtener reportes de Material

        #endregion VU_12 Obtener reportes de Material

        #region VU_13 Gestionar Horarios

        public List<String> EstudiantesHorario()
        {
                return null;
        }

        public List<String> EstudiantesHorariosPendientes()
        {
                return null;
        }

        public void ActualizarEstatus(int idHorario)
        {

        }

        public bool SimularFinPeriodoAcademico()
        {
                return false;
        }

        public bool EnviarCorreo(int idEstudiante, String horario)
        {
                return false;
        }

        public bool AprobarHorario(int idEstudiante, int idHorario)
        {
                return false;
        }

        public List<Materia> ConsultarMateriasPrematricula(Estudiante estudiante, int semestreActual)
        {
            IComandoConsultarMateriasPrematricula comando = FabricaComando.CrearComandoConsultarMateriasPrematricula(estudiante,semestreActual);
            return comando.Ejecutar();
        }

        public List<SeccionMateria> ConsultarSeccionesDeUnaMateria(Materia materia)
        {
            IComandoConsultarSeccionDeUnaMateria comando = FabricaComando.CrearComandoConsultarSeccionesDeUnaMateria(materia);
            return comando.Ejecutar();
        }

        public List<HorarioDeClase> ConsultarHorarioDeClaseSeccion(SeccionMateria seccionMateria)
        {
            IComandoConsultarHorarioDeClaseSeccion comando =
                FabricaComando.CrearComandoConsultarHorarioDeClaseSeccion(seccionMateria);
            return comando.Ejecutar();
        }
        #endregion VU_13 Gestionar Horarios

        #region VU_14 Registrarse en Sistema

         public List<Universidad> ConsultarUniversidades()
        {
            IComandoLlenarComboRegistroUni miComando = FabricaComando.CrearComandoLlenarComboUniversidad();
            return miComando.Ejecutar();
        }

         public bool verificarCorreoUsuarioRol(String correo,int usuario)
         {
             if (usuario == 1)
             {
                 Rol rolActual = FabricaRol.CrearUniversidad();
                 return rolActual.VerificarCorreo(correo);
                 
             }
             if (usuario == 2)
             {
                 Rol rolActual = FabricaRol.CrearEscuela();
                 return rolActual.VerificarCorreo(correo);
             }
             if (usuario == 3)
             {
                 Rol rolActual = FabricaRol.CrearEstudiante();
                 return rolActual.VerificarCorreo(correo);
             }
             if (usuario == 4)
             {
                 Rol rolActual = FabricaRol.CrearProfesor();
                 return rolActual.VerificarCorreo(correo);
             }
             return false;
         }

         public bool verificarCedulaUsuarioRol(int cedula, int usuario)
         {
             
             if (usuario == 3)
             {
                 ControladorEstudiante rolActual = new ControladorEstudiante();
                 return rolActual.VerificarCedula(cedula);
             }
             if (usuario == 4)
             {
                 
                 ControladorProfesor rolActual = new ControladorProfesor();
                 return rolActual.VerificarCedula(cedula);
             }
             return false;
         }

         public bool verificarUsuarioRol(int cedula, int usuario)
         {
             if (usuario == 1)
             {
                 //Rol rolActual = FabricaRol.CrearUniversidad();
                 ControladorUniversidad rolActual = new ControladorUniversidad();
                 return rolActual.VerificarRol(cedula);

             }
             if (usuario == 2)
             {
                 ControladorEscuela rolActual = new ControladorEscuela();
                 return rolActual.VerificarRol(cedula);
             }
             if (usuario == 3)
             {
                 ControladorEstudiante rolActual = new ControladorEstudiante(); 
                 return rolActual.VerificarRol(cedula);
             }
             if (usuario == 4)
             {
                 ControladorProfesor rolActual = new ControladorProfesor();
                 return rolActual.VerificarRol(cedula);
             }
             return false;
         }
         public List<Escuela> ConsultarEscuelasCombo()
         {
             IComandoLlenarComboRegistroEscuela miComando = FabricaComando.CrearComandoLlenarComboEscuela();
             return miComando.Ejecutar();
         }

         public void RegistrarRolenSistema(String correo, String clave,int usuario, int opcion)
         {
             if (usuario == 1)
             {
                 //Rol rolActual = FabricaRol.CrearUniversidad();
                 ControladorUniversidad rolActual = new ControladorUniversidad();
                 rolActual.Correo = correo;
                 rolActual.Password = clave;
                 rolActual.RegistrarRol(rolActual, opcion);

             }
             if (usuario == 2)
             {
                 //Rol rolActual = FabricaRol.CrearEscuela();
                 ControladorEscuela rolActual = new ControladorEscuela();
                 rolActual.Correo = correo;
                 rolActual.Password = clave;
                 rolActual.RegistrarRol(rolActual, opcion);
             }
             if (usuario == 3)
             {
                 //Rol rolActual = FabricaRol.CrearEstudiante();
                 ControladorEstudiante rolActual = new ControladorEstudiante();
                 rolActual.Correo = correo;
                 rolActual.Password = clave;
                 rolActual.RegistrarRol(rolActual, opcion);
             }
             if (usuario == 4)
             {
                 //Rol rolActual = FabricaRol.CrearProfesor();
                 ControladorProfesor rolActual = new ControladorProfesor();
                 rolActual.Correo = correo;
                 rolActual.Password = clave;
                 rolActual.RegistrarRol(rolActual, opcion);
             }
         }
            

        
        #endregion VU_14 Registrarse en Sistema

        #region VU_15 Gestionar de Acceso

        // METODO COMENTADO POR EL GRUPO 4 YA QUE LA CLASE ROL ES ABSTRACTA Y ES CLASE PADRE DE LAS CLASES CONTROLADORAS
       /* public int AutenticarUsuario(String nickname, String password)
        {
            try
            {
                InicioSistema inicio = new InicioSistema();
                RolActual = inicio.ConsultarUsuarioBD(nickname, password);
                ///si el rol existe en el sistema
                if (RolActual != null)
                {
                    int tipoUsuario = inicio.DefinirUsuario(RolActual);
                    return tipoUsuario;
                }
                else
                {
                    return 0;
                }
            }
            catch (InicioSesionException)
            {
                return -1;
            }
        }*/

        public String VerificarCedulaEstudiante(int ci)
        {
            return null;
        }

        public bool VerificarCedulaProfesor(int ci)
        {
            return false;
        }

        public bool VerificarRol(int ci, int usuario)
        {
            return false;
        }

        public bool VerificarCorreo(string correo)
        {
            return false;
        }

        public String UsuarioActual(string nick, string pass)
        {
            return null;
        }

        public void CargarUsuarioDeRol(String rolActual)
        {
            
        }

        public bool RegistrarRol(String rolActual, int usuario)
        {
            return false;
        }

        public List<String> ConsultarEscuelas()
        {
            return null;
        }

        #endregion VU_15 Gestionar de Acceso

    }
}